% !Mode:: "TeX:UTF-8"

\chapter{软件需求规格说明书}

\section{引言}
\subsection{目的}

本规格说明书旨在详细描述“饿了么V2.0”项目的软件需求，包括功能需求、非功能需求、系统架构、接口定义、用户界面、数据安全与隐私保护、系统维护与支持等方面的要求，
以确保开发团队、测试团队、项目管理团队以及利益相关者对项目的理解一致，为后续的开发、测试、验收工作提供基准。目的在于提供一个用户友好、功能全面、安全可靠的在线订餐平台，以满足快节奏生活中人们对便捷餐饮服务的需求。

\subsection{范围}
本项目覆盖Web端管理后台、数据库管理系统及与第三方服务的集成接口。
具体包括用户管理、商家入驻与管理、商品与菜单管理、在线订餐、评价与反馈、等功能模块。

\subsection{文档组织}
本规格说明书分为多个章节，包括引言、项目概述、功能需求、非功能需求、系统架构、待解决问题、数据安全与隐私保护等。

\section{项目概述}

\subsection{项目背景}
天津大学北洋园校区，是天津大学的新校区，位于天津津南区、海河中游天津海河教育园区。该校区距离市中心较为遥远，5 公里内可配送的校外商家数量小于 100 家。该校区的占地面积为 243.6万平方米，全日制在校生总数为 38772人，教职工总数为 4895人。为了方便管理校园，天津大学北洋园校区采用半封闭式管理的方式管理，其中一个体现在于订
外卖时，骑手不能将外卖送进校园内，而只能放到校园大门的外卖柜甚至门口地上。在没有该项目前，这样的方式会导致一些问题 ：
\begin{itemize}
  \item 该校区占地面积广，每次都去校园大门取外卖会造成时间浪费、外卖放置时间过久口感下降等不便。
  \item 该校区在校内人数较多，点外卖的需求量大，校园门口管理外卖会造成一定的困难，不排除有盗窃外卖的可能性。
  \item 距离市中心较为遥远，一定范围内可配送的校外外卖商家较少，无法满足在校师生对于外卖多样性的需求。
  \item 一定数量的在校师生希望能不用自己去食堂点餐再回到宿舍吃饭，希望可以通过外卖的方式点校内的餐食。
\end{itemize}
为了解决这些问题，学校高层希望通过“饿了么”项目提供一体化的外卖配送平台，引进学校周边的商家和学校食堂的商家，实现可查看商家信息、
选择商家和菜品、下单支付、用户管理、精准定位等服务，便于校方招聘和管理校内骑手在北洋园校区内实现可校内配送的外卖服务。
\subsection{项目目标}
本项目旨在实现用户点餐和用户管理的业务，可细分为实现如下功能：
\begin{itemize}
  \item 用户注册、登录的功能。
  \item 用户修改信息、退出登录功能。
  \item 商品分类的功能。
  \item 查看、编辑、新增、删除收获地址功能。
  \item 查看购物车功能。
  \item 取消订单功能。
  \item 用户登录过期检测功能。
  \item 商家注册、登录的功能。
  \item 商家管理食品的功能。
  \end{itemize}
  \subsection{涉众分析}
  本项目在天津大学北洋园校区内配送，商家范围在此校区及其周边 10公里内。

  本项目主要用户为系统管理人员，校内外附近外卖商家及天津大学北洋园校区在校教师及学生。

  本项目涉及三个入口，分别为管理员入口、商家入口和用户入口。管理员入 口的系统管理的事情主要有：管理员的登录、对商家进行管理，管理包括查看、 新增、删除。商家入口的系统管理的事情主要有：商家登录/更新、商家信息管 理、商家食品管理。 用户入口的系统管理的事情主要有：选择商家食品点餐、确认订单、用户管理、地址管理、查看购物车等。
  对于在校师生，其需要：
  \begin{itemize}
    \item 能够享受校外的商品配送至宿舍楼不是校门口。
    \item 能够在错过食堂就餐时间时享受外卖服务。
    \item 能够进行精准定位。
    \item 能够设置不同的地址给另外一个地方的好友订外卖。
    \item 能够使用积分、券包、会员等降低价格。
    \item 能够实时编辑信息和查看购物车及地址。
    \item 能够查看不同分类的商品。
    \item 能够不泄露信息，进行登录过期检测等保护。
    \end{itemize}
    对于校内外商家，其需要:
    \begin{itemize}
      \item 能够实现校内配送的外卖服务。
      \item 能够查看和修改商家信息。
      \item 能够更新密码。
      \item 能够进行商品的管理，
      即查看食品列表、新增食品、 修改食品、删除食品。
      \end{itemize}
      对于系统管理员角色，其需要:
      \begin{itemize}
        \item 能够查看所有商家列表。
      \item 能够新建商家。
      \item 能够删除商家。
      \item 能够搜索商家。
      \item 更方便有效的管理校内外卖配送和抑制外卖盗窃现象。
    \end{itemize}
    \begin{figure}[htbp]
      \centering
      \includegraphics[width=0.4\textwidth]{business}
      \caption{业务概念图-商家入口}\label{fig:business}
      \vspace{\baselineskip}
      \end{figure}

      \begin{figure}[htbp]
        \centering
        \includegraphics[width=0.4\textwidth]{user}
        \caption{业务概念图-用户入口}\label{fig:user}
        \vspace{\baselineskip}
        \end{figure}

        \subsection{系统角色}
        \begin{itemize}
          \item {用户}：订餐者，可以浏览菜单、下单、支付、评价等。
          \item {商家}：餐厅经营者，负责商品管理、订单处理、促销活动设置等。
          \item {配送员}：负责将订单从商家送至用户指定地点。
          \item {管理员}：维护系统正常运行，处理异常情况，管理商家入驻等。
      \end{itemize}

      \subsection{业务流程}

      \begin{figure}[htbp]
        \centering
        \includegraphics[width=0.4\textwidth]{order}
        \caption{用户点餐业务流程图}\label{fig:order}
        \vspace{\baselineskip}
        \end{figure}
        \section{项目功能需求}

        \subsection{功能性需求}
        \begin{enumerate}
\item 用户管理：
        \begin{itemize}
          \item {用户注册与登录}：支持使用手机号注册方式，支持多用户注册、密码保存、退出登录等功能。
          \item {个人资料管理}：允许用户编辑个人信息、收货地址、支付方式等。
          \item {订单历史查看}：用户可查看历史订单详情，包括订单状态、配送信息等。
      \end{itemize}
      \item 商家入驻与管理：
\begin{itemize}
\item {商家注册与登录}：提供商家入驻流程，包括商家注册、登录等。
          \item {店铺信息管理}: 商家可设置店铺名称、Logo、营业时间、菜单等。
          \item {订单管理}：商家可查看并处理订单，包括商品信息、订单总价等状态更新。
      \end{itemize}
      \item 商品与菜单管理：
      \begin{itemize}
        \item {商品上传与维护}：商家可添加、编辑、删除商品，设置价格、库存、描述等信息。
                  \item {菜单分类}: 支持多级菜单分类，便于用户浏览选择。
              \end{itemize}
              \item 在线订餐与支付：   
              \begin{itemize}
                \item {菜品浏览与选择}：用户可根据分类、商家、评价等筛选菜品。
                          \item {购物车管理}: 支持添加、删除商品，调整数量，查看总价等。
                      \end{itemize}   
                    \end{enumerate}     
        \subsection{非功能性需求}
        \begin{enumerate}
          \item 性能需求：
                  \begin{itemize}
                    \item {响应时间}：主要操作响应时间不超过3秒。
                    \item {并发能力}：支持高并发访问，确保在高峰期系统稳定运行。
                    \item {数据处理能力}：支持海量数据存储与高效检索。
                \end{itemize}
                \item 安全性需求：
          \begin{itemize}
          \item {用户数据保护}：加密存储用户敏感信息，如密码、支付信息等。
                    \item {访问控制}: 实施严格的权限管理，确保数据访问的安全性。
                    \item {防止攻击}：具备防SQL注入、XSS攻击、DDoS攻击等安全机制。
                \end{itemize}
                \item 可用性需求：
                \begin{itemize}
                  \item {用户界面友好}：设计简洁、直观、易用的用户界面。
                            \item {错误处理}: 提供清晰的错误提示和恢复机制。
                            \item {帮助文档}: 提供详尽的帮助文档和用户手册。
                        \end{itemize}
                        \item 可维护性需求：   
                        \begin{itemize}
                          \item {代码规范}：遵循统一的编码标准和规范。
                                    \item {文档齐全}: 提供完整的开发文档、测试文档和用户文档。
                                    \item {模块化设计}:采用模块化设计思想，便于系统维护和升级。
                                \end{itemize}   
                              \end{enumerate}   
\section{现有项目需要解决的问题}

\subsection{功能方面的问题}

\begin{itemize}
  \item 功能不完整，只有用户下订单一个流程，缺少其他必要的基本功能。
  \item 有的页面无法返回上一步。首页之后的页面缺少返回键，用户只能一路点到底才能退出。 
  \item 在对订单中涉及的商品名称、价格等信息进行修改时，
  会引起历史订单信息的修改，应在存储历史信息时进行拷贝存储。修改送货地址也有类似问题。
  \item 添加新的收货地址的问题。在新增收获地址时会出现显示的用户信息与新增的不同的情况。原因是前端在取数据时，取得的是登录用户的信息。用户也可以
  给其他人点餐，根据所选地址进行了显示信息的更改。 
  \item 前端订单页面的小数显示上存在 bug，可能会出现小数点后很多位数字，没有使用 toFix 函数进行更改限制。
  \item 购物车不能展开，无法查看自己已经买的东西的单价和数量。
  \item 历史未支付订单应该有支付入口  
  \item 该项目的 CSS 很多是写死的，没有考虑页面适配，稍微比例有些问题会出 bug。
  作为一个手机网页端应该尝试满足不同机型的比例适配。
  \item 前端版本代码均存在商家列表/食品列表不能拉到底，最后一个信息会被底部菜单栏遮挡，
  可以理解为下方没有一块空白将列表顶上去而底部菜单栏又将其遮挡住。  
  
\end{itemize}

  \subsection{设计和安全方面的问题}
\begin{itemize}
  \item 前后端接口设计不规范，完全不符合 RESTful 风格。
  \item 用户隐私信息如：电话号码、登录密码等，通过接口对参数进行明文传输，
  这使得用户的隐私信息被直接暴露，造成极大的安全隐患。
  \item 后端向前端返回的对象为数据库中的该对象的全部信息，例如返回给前端的用户实体包含该用户密码，这是一个不安全的设计，
  直接将一些不该暴露的信息暴露给前端，存在巨大的信息安全隐患，应当把向前端返回的信息单独封装进一个类，只返回必要的信息。 
  \item 用户注册时，存入的密码未经任何加密处理，这里应该将密码单向加密后再存入数据库。 
  \item 后端对前端提交的数据和身份并不检验，这就导致可能有伪造的前端提交恶意数据，
  可能修改他人送餐地址，或者修改订单金额等。 
  \item 商家端删除食品时，未曾对该食品是否属于该商家进行验证，
  导致可能会出现某商家删除其他商家食品的现象。
  \item 商品不是无限的，应该有数量，订购时应加互斥锁。
  \item 考虑到在实际应用场景中可能存在网络异常情况，例如用户进行订单支付时接口超时，重新调用接口会导致重复扣款，严重影响软件质量及用户评价。
  \item 后端代码订单业务逻辑缺少对订单和购物车是否为空的验证。 
  \item 项目四的后端跨域处理方案只能允许本地进行访问，完全无法部署上线。 
  \item 没有部署，仍然是在开发环境中演示。
\end{itemize}
  \section{系统架构设计}

\subsection{总体框架}
项目主要运行环境为Windows10及以上系统，项目前端将对vue2.0框架进行升级，
使用vue3.0运行在用户的浏览器上。后端在服务器上搭建。
\begin{itemize}
  \item{前端技术栈} :    

  项目前端将目前vue2.0版本升级为3.0版本，最终基于vue 3.0采用组件化开发模式完成前端搭建。 
  \item{后端技术栈} :    
项目后端将遵循RESTful API设计规范，基于Spring Boot进行后端项目搭建及开发。 
\item{数据库技术} :
项目数据库主要使用MySQL作为主数据库，存储用户信息、商家信息、菜品信息、订单数据等，项目采用主从数据库架构以提升查询效率。
\end{itemize}

\subsection{模块划分}
\begin{itemize}
  \item{用户模块}：负责用户注册、登录、个人信息管理等。
  \item{订单模块}：负责订单提交、支付、历史订单管理等。
  \item{商家模块}：负责商家入驻、商品管理、订单管理等。
\end{itemize}
